package cn.zhukelili.expand.$2;

import cn.zhukelili.expand.$1.HumanFactory;

/**
 * @description: 简单工厂模式中的场景类
 * @author: hhbeast
 * @since: 2018/7/29 13:44
 */
public class NvWa {
    public static void main(String[] args) {
        //女娲第一次造人，火候不足，于是白色人种产生了
        System.out.println("--造出的第一批人是白色人种--");
        Human whiteHuman = (new WhiteHumanFactory()).createHuman();
        whiteHuman.getColor();
        whiteHuman.talk();
        //女娲第二次造人，火候过足，于是黑色人种产生了
        System.out.println("\n--造出的第二批人是黑色人种--");
        Human blackHuman = (new BlackHumanFactory()).createHuman();
        blackHuman.getColor();
        blackHuman.talk();
        //第三次造人，火候刚刚好，于是黄色人种产生了
        System.out.println("\n--造出的第三批人是黄色人种--");
        Human yellowHuman = (new YellowHumanFactory()).createHuman();
        yellowHuman.getColor();
        yellowHuman.talk();
    }
}

/*
运行结果还是相同。我们回顾一下，每一个产品类都对应了一个创建类，好处就是创建
类的职责清晰，而且结构简单，但是给可扩展性和可维护性带来了一定的影响。为什么这么
说呢？如果要扩展一个产品类，就需要建立一个相应的工厂类，这样就增加了扩展的难度。
因为工厂类和产品类的数量相同，维护时需要考虑两个对象之间的关系。
当然，在复杂的应用中一般采用多工厂的方法，然后再增加一个协调类，避免调用者与
各个子工厂交流，协调类的作用是封装子工厂类，对高层模块提供统一的访问接口。
 */
